// RAP [bm]: makes no sense without IWorkbench#restart
///*******************************************************************************
// * Copyright (c) 2000, 2009 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// *******************************************************************************/
//
//package org.eclipse.ui.internal.dialogs;
//
//import java.util.Arrays;
//import java.util.Comparator;
//import java.util.Locale;
//
//import org.eclipse.core.runtime.IConfigurationElement;
//import org.eclipse.core.runtime.IProgressMonitor;
//import org.eclipse.core.runtime.IStatus;
//import org.eclipse.core.runtime.Platform;
//import org.eclipse.core.runtime.Status;
//import org.eclipse.jface.dialogs.Dialog;
//import org.eclipse.jface.dialogs.IDialogConstants;
//import org.eclipse.jface.dialogs.MessageDialog;
//import org.eclipse.jface.preference.IPreferenceStore;
//import org.eclipse.jface.preference.PreferencePage;
//import org.eclipse.jface.util.IPropertyChangeListener;
//import org.eclipse.jface.util.PropertyChangeEvent;
//import org.eclipse.jface.window.Window;
//import org.eclipse.osgi.util.NLS;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.accessibility.AccessibleAdapter;
//import org.eclipse.swt.accessibility.AccessibleEvent;
//import org.eclipse.swt.events.SelectionAdapter;
//import org.eclipse.swt.events.SelectionEvent;
//import org.eclipse.swt.events.SelectionListener;
//import org.eclipse.swt.graphics.GC;
//import org.eclipse.swt.layout.FormAttachment;
//import org.eclipse.swt.layout.FormData;
//import org.eclipse.swt.layout.FormLayout;
//import org.eclipse.swt.layout.GridData;
//import org.eclipse.swt.layout.GridLayout;
//import org.eclipse.swt.widgets.Button;
//import org.eclipse.swt.widgets.Combo;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Control;
//import org.eclipse.swt.widgets.Group;
//import org.eclipse.swt.widgets.Label;
//import org.eclipse.swt.widgets.Text;
//import org.eclipse.ui.IWorkbench;
//import org.eclipse.ui.IWorkbenchPreferenceConstants;
//import org.eclipse.ui.IWorkbenchPreferencePage;
//import org.eclipse.ui.PlatformUI;
//import org.eclipse.ui.internal.IPreferenceConstants;
//import org.eclipse.ui.internal.IWorkbenchConstants;
//import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
//import org.eclipse.ui.internal.WorkbenchMessages;
//import org.eclipse.ui.internal.WorkbenchPlugin;
//import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
//import org.eclipse.ui.internal.themes.IThemeDescriptor;
//import org.eclipse.ui.internal.util.PrefUtil;
//import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
//import org.eclipse.ui.progress.UIJob;
//import org.eclipse.ui.themes.ITheme;
//import org.eclipse.ui.themes.IThemeManager;
//
//import com.ibm.icu.text.Collator;
//
///**
// * The ViewsPreferencePage is the page used to set preferences for the
// * appearance of the workbench. Originally this applied only to views but now
// * applies to the overall appearance, hence the name.
// */
//public class ViewsPreferencePage extends PreferencePage implements
//		IWorkbenchPreferencePage {
//
//	private Button showTextOnPerspectiveBar;
//
//	/*
//	 * change the tab style of the workbench
//	 */
//	private Button showTraditionalStyleTabs;
//
//	private Button enableAnimations;
//
//	private Button useColoredLabels;
//
//	private Button editorTopButton;
//
//	private Button editorBottomButton;
//
//	private Button viewTopButton;
//
//	private Button viewBottomButton;
//
//	private Button perspLeftButton;
//
//	private Button perspTopLeftButton;
//
//	private Button perspTopRightButton;
//
//	static final String EDITORS_TITLE = WorkbenchMessages.ViewsPreference_editors;
//
//	private static final String EDITORS_TOP_TITLE = WorkbenchMessages.ViewsPreference_editors_top;
//
//	private static final String EDITORS_BOTTOM_TITLE = WorkbenchMessages.ViewsPreference_editors_bottom;
//
//	private static final String VIEWS_TITLE = WorkbenchMessages.ViewsPreference_views;
//
//	private static final String VIEWS_TOP_TITLE = WorkbenchMessages.ViewsPreference_views_top;
//
//	private static final String VIEWS_BOTTOM_TITLE = WorkbenchMessages.ViewsPreference_views_bottom;
//
//	private static final String PERSP_TITLE = WorkbenchMessages.ViewsPreference_perspectiveBar;
//
//	private static final String PERSP_LEFT_TITLE = WorkbenchMessages.ViewsPreference_perspectiveBar_left;
//
//	private static final String PERSP_TOP_LEFT_TITLE = WorkbenchMessages.ViewsPreference_perspectiveBar_topLeft;
//
//	private static final String PERSP_TOP_RIGHT_TITLE = WorkbenchMessages.ViewsPreference_perspectiveBar_topRight;
//
//	// These constants aren't my favourite idea, but to get this preference done
//	// for M9... A better solution might be to have the presentation factory set
//	// its dependant preference defaults on startup. I've filed bug 63346 to do
//	// something about this area.
//	private static final String R21PRESENTATION_ID = "org.eclipse.ui.internal.r21presentationFactory"; //$NON-NLS-1$
//	private static final String DEFAULT_PRESENTATION_ID = IWorkbenchConstants.DEFAULT_PRESENTATION_ID;
//	private static final String R30_PRESENTATION_ID = "org.eclipse.ui.presentations.r30"; //$NON-NLS-1$
//
//	private static final String INITIAL_VAL = new String();
//
//	private static final int INITIAL_LOC_INT = -1;
//
//	// remembers whether the hidden fastview bar pref needs to be changed on
//	// OK/Apply
//	private String fastViewLoc = INITIAL_VAL;
//
//	private String showTextOnPerspBar = INITIAL_VAL;
//
//	private int editorAlignment;
//
//	private boolean editorAlignmentChanged = false;
//
//	private int viewAlignment;
//
//	private boolean viewAlignmentChanged = false;
//
//	private String perspBarLocation;
//
//	private Combo themeCombo;
//
//	private Combo presentationCombo;
//
//	private IConfigurationElement[] presentationFactories;
//
//	private String currentPresentationFactoryId;
//
//	private Button overridePresButton;
//
//	private IPropertyChangeListener overrideListener;
//
//	private boolean restartPosted = false;
//
//	private Group editorTabGroup;
//
//	private Group viewTabGroup;
//
//	private Group perspBarTabGroup;
//
//	private Text themeDescriptionText;
//
//	/**
//	 * Create a composite that for creating the tab toggle buttons.
//	 * 
//	 * @param composite
//	 *            Composite
//	 * @param title
//	 *            String
//	 */
//	private Group createButtonGroup(Composite composite, String title) {
//		Group buttonComposite = new Group(composite, SWT.NONE);
//		buttonComposite.setText(title);
//		FormLayout layout = new FormLayout();
//		layout.marginWidth = 5; // same as GridData default
//		layout.marginHeight = 5; // same as GridData default
//		buttonComposite.setLayout(layout);
//		buttonComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
//				false));
//		return buttonComposite;
//	}
//
//	/**
//	 * Creates and returns the SWT control for the customized body of this
//	 * preference page under the given parent composite.
//	 * <p>
//	 * This framework method must be implemented by concrete subclasses.
//	 * </p>
//	 * 
//	 * @param parent
//	 *            the parent composite
//	 * @return Control the new control
//	 */
//	protected Control createContents(Composite parent) {
//		initializeDialogUnits(parent);
//
//		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent,
//				IWorkbenchHelpContextIds.VIEWS_PREFERENCE_PAGE);
//
//		IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
//
//		editorAlignment = apiStore
//				.getInt(IWorkbenchPreferenceConstants.EDITOR_TAB_POSITION);
//		viewAlignment = apiStore
//				.getInt(IWorkbenchPreferenceConstants.VIEW_TAB_POSITION);
//		perspBarLocation = apiStore
//				.getString(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR);
//
//		Composite composite = new Composite(parent, SWT.NONE);
//		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
//
//		GridLayout layout = new GridLayout();
//		layout.marginWidth = 0;
//		layout.marginHeight = 0;
//		layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
//		composite.setLayout(layout);
//
//		createPresentationCombo(composite);
//		createPresentationOverride(composite);
//		createEditorTabButtonGroup(composite);
//		createViewTabButtonGroup(composite);
//		createPerspBarTabButtonGroup(composite);
//		createShowTextOnPerspectiveBarPref(composite);
//		createThemeCombo(composite);
//		createThemeDescriptionText(composite);
//		createShowTraditionalStyleTabsPref(composite);
//		createEnableAnimationsPref(composite);
//		createColoredLabelsPref(composite);
//
//		updateOverride();
//		hookOverrideListener();
//
//		applyDialogFont(composite);
//
//		return composite;
//	}
//
//	private void createColoredLabelsPref(Composite composite) {
//		IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
//
//		useColoredLabels = createCheckButton(
//				composite,
//				WorkbenchMessages.ViewsPreference_useColoredLabels,
//				apiStore
//						.getBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS));
//	}
//
//	private void createThemeCombo(Composite composite) {
//		new Label(composite, SWT.NONE)
//				.setText(WorkbenchMessages.ViewsPreference_currentTheme);
//		themeCombo = new Combo(composite, SWT.READ_ONLY);
//		themeCombo
//				.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
//		themeCombo.addSelectionListener(new SelectionAdapter() {
//			public void widgetSelected(SelectionEvent e) {
//				refreshThemeDescriptionText();
//			}
//		});
//		refreshThemeCombo(PlatformUI.getWorkbench().getThemeManager()
//				.getCurrentTheme().getId());
//	}
//
//	/**
//	 * Create the text box that will contain the current theme description text
//	 * (if any).
//	 * 
//	 * @param parent
//	 *            the parent <code>Composite</code>.
//	 */
//	private void createThemeDescriptionText(Composite parent) {
//		new Label(parent, SWT.NONE)
//				.setText(WorkbenchMessages.ViewsPreference_currentThemeDescription);
//
//		themeDescriptionText = new Text(parent, SWT.H_SCROLL | SWT.V_SCROLL
//				| SWT.READ_ONLY | SWT.BORDER | SWT.WRAP);
//		GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
//		// give a height hint that'll show at least two lines (and let the
//		// scroll bars draw nicely if necessary)
//		GC gc = new GC(parent);
//		layoutData.heightHint = Dialog.convertHeightInCharsToPixels(gc
//				.getFontMetrics(), 2);
//		gc.dispose();
//		themeDescriptionText.setLayoutData(layoutData);
//
//		refreshThemeDescriptionText();
//	}
//
//	private void refreshThemeDescriptionText() {
//		String description = null;
//		int idx = themeCombo.getSelectionIndex();
//		// idx == 0 is "Default" which has no description
//		if (idx > 0) {
//			IThemeDescriptor theme = WorkbenchPlugin.getDefault()
//					.getThemeRegistry().getThemes()[idx - 1];
//			description = theme.getDescription();
//		}
//		if (description == null) {
//			description = ""; //$NON-NLS-1$
//		}
//		themeDescriptionText.setText(description);
//	}
//
//	private Button createCheckButton(Composite composite, String text,
//			boolean selection) {
//		Button button = new Button(composite, SWT.CHECK);
//		button.setText(text);
//		button.setSelection(selection);
//		return button;
//	}
//
//	private void createPresentationOverride(Composite parent) {
//		IPreferenceStore store = getPreferenceStore();
//		boolean override = store
//				.getBoolean(IPreferenceConstants.OVERRIDE_PRESENTATION);
//
//		// workaround to catch the case where the show text value was changed
//		// outside of this page
//		// turn off text on persp bar
//		boolean showText = PrefUtil.getAPIPreferenceStore().getBoolean(
//				IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR);
//		if (showText && isR21(currentPresentationFactoryId) || !showText
//				&& isR30(currentPresentationFactoryId)) {
//			if (!override) {
//				store
//						.setValue(IPreferenceConstants.OVERRIDE_PRESENTATION,
//								true);
//				override = true;
//			}
//		}
//		// workaround to catch the case where the perspective switcher location
//		// was changed outside of this page
//		// turn off text on persp bar
//		String barLocation = PrefUtil.getAPIPreferenceStore().getString(
//				IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR);
//		if (!barLocation.equals(IWorkbenchPreferenceConstants.LEFT)
//				&& isR21(currentPresentationFactoryId)
//				|| !barLocation.equals(IWorkbenchPreferenceConstants.TOP_RIGHT)
//				&& isR30(currentPresentationFactoryId)) {
//			if (!override) {
//				store
//						.setValue(IPreferenceConstants.OVERRIDE_PRESENTATION,
//								true);
//				override = true;
//			}
//		}
//
//		overridePresButton = createCheckButton(parent,
//				WorkbenchMessages.ViewsPreference_override, override);
//		overridePresButton.addSelectionListener(new SelectionListener() {
//			public void widgetSelected(SelectionEvent e) {
//				updateOverrideState(overridePresButton.getSelection());
//			}
//
//			public void widgetDefaultSelected(SelectionEvent e) {
//				updateOverrideState(overridePresButton.getSelection());
//			}
//		});
//	}
//
//	private void updateOverrideState(boolean override) {
//		IPreferenceStore store = getPreferenceStore();
//		if (store.getBoolean(IPreferenceConstants.OVERRIDE_PRESENTATION) != override) {
//			store
//					.setValue(IPreferenceConstants.OVERRIDE_PRESENTATION,
//							override);
//		}
//		// as we are no longer overriding the prefs should match the selected
//		// presentation
//		if (!override)
//			setPresentationPrefs(getSelectedPresentationID());
//	}
//
//	private void createPresentationCombo(Composite parent) {
//		new Label(parent, SWT.NONE)
//				.setText(WorkbenchMessages.ViewsPreference_currentPresentation);
//
//		presentationCombo = new Combo(parent, SWT.READ_ONLY);
//		presentationCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER,
//				true, false));
//		presentationCombo.addSelectionListener(new SelectionListener() {
//
//			public void widgetSelected(SelectionEvent e) {
//				updateSettings();
//			}
//
//			public void widgetDefaultSelected(SelectionEvent e) {
//				updateSettings();
//			}
//
//			private void updateSettings() {
//				if (!overridePresButton.getSelection()) {
//					setPresentationPrefs(getSelectedPresentationID());
//				}
//			}
//		});
//
//		refreshPresentationCombo();
//		setPresentationSelection();
//	}
//
//	/**
//	 * Set the two supplied controls to be beside each other.
//	 */
//	private void attachControls(Control leftControl, Control rightControl) {
//		FormData leftData = new FormData();
//		leftData.left = new FormAttachment(0, 0);
//
//		FormData rightData = new FormData();
//		rightData.left = new FormAttachment(
//				leftControl,
//				convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING));
//
//		leftControl.setLayoutData(leftData);
//		rightControl.setLayoutData(rightData);
//	}
//
//	/**
//	 * Create a composite that contains buttons for selecting tab position for
//	 * the edit selection.
//	 * 
//	 * @param composite
//	 *            Composite
//	 */
//	private void createEditorTabButtonGroup(Composite composite) {
//		editorTabGroup = createButtonGroup(composite, EDITORS_TITLE);
//
//		editorTopButton = new Button(editorTabGroup, SWT.RADIO);
//		editorTopButton.setText(EDITORS_TOP_TITLE);
//		editorTopButton.setSelection(editorAlignment == SWT.TOP);
//		editorTopButton.getAccessible().addAccessibleListener(
//				new AccessibleAdapter() {
//					public void getName(AccessibleEvent e) {
//						e.result = EDITORS_TITLE;
//					}
//				});
//
//		editorBottomButton = new Button(editorTabGroup, SWT.RADIO);
//		editorBottomButton.setText(EDITORS_BOTTOM_TITLE);
//		editorBottomButton.setSelection(editorAlignment == SWT.BOTTOM);
//
//		SelectionListener sel = new SelectionAdapter() {
//			public void widgetSelected(SelectionEvent e) {
//				if (e.widget.equals(editorTopButton)) {
//					if (editorAlignment != SWT.TOP) {
//						editorAlignment = SWT.TOP;
//						editorAlignmentChanged = true;
//					}
//				} else if (e.widget.equals(editorBottomButton)) {
//					if (editorAlignment != SWT.BOTTOM) {
//						editorAlignment = SWT.BOTTOM;
//						editorAlignmentChanged = true;
//					}
//				}
//			}
//		};
//
//		editorTopButton.addSelectionListener(sel);
//		editorBottomButton.addSelectionListener(sel);
//
//		attachControls(editorTopButton, editorBottomButton);
//	}
//
//	/**
//	 * Create a composite that contains buttons for selecting tab position for
//	 * the view selection.
//	 * 
//	 * @param composite
//	 *            Composite
//	 */
//	private void createViewTabButtonGroup(Composite composite) {
//		viewTabGroup = createButtonGroup(composite, VIEWS_TITLE);
//
//		viewTopButton = new Button(viewTabGroup, SWT.RADIO);
//		viewTopButton.setText(VIEWS_TOP_TITLE);
//		viewTopButton.setSelection(this.viewAlignment == SWT.TOP);
//
//		viewBottomButton = new Button(viewTabGroup, SWT.RADIO);
//		viewBottomButton.setText(VIEWS_BOTTOM_TITLE);
//		viewBottomButton.setSelection(viewAlignment == SWT.BOTTOM);
//
//		SelectionListener sel = new SelectionAdapter() {
//			public void widgetSelected(SelectionEvent e) {
//				if (e.widget.equals(viewTopButton)) {
//					if (viewAlignment != SWT.TOP) {
//						viewAlignment = SWT.TOP;
//						viewAlignmentChanged = true;
//					}
//				} else if (e.widget.equals(viewBottomButton)) {
//					if (viewAlignment != SWT.BOTTOM) {
//						viewAlignment = SWT.BOTTOM;
//						viewAlignmentChanged = true;
//					}
//				}
//			}
//		};
//
//		viewTopButton.addSelectionListener(sel);
//		viewBottomButton.addSelectionListener(sel);
//
//		attachControls(viewTopButton, viewBottomButton);
//	}
//
//	/**
//	 * Create a composite that contains buttons for selecting perspective
//	 * switcher position.
//	 * 
//	 * @param composite
//	 *            Composite
//	 */
//	private void createPerspBarTabButtonGroup(Composite composite) {
//		perspBarTabGroup = createButtonGroup(composite, PERSP_TITLE);
//
//		perspLeftButton = new Button(perspBarTabGroup, SWT.RADIO);
//		perspLeftButton.setText(PERSP_LEFT_TITLE);
//		perspLeftButton.setSelection(IWorkbenchPreferenceConstants.LEFT
//				.equals(perspBarLocation));
//		perspLeftButton.addSelectionListener(new SelectionAdapter() {
//			public void widgetSelected(SelectionEvent e) {
//				perspBarLocation = IWorkbenchPreferenceConstants.LEFT;
//			}
//		});
//
//		perspTopLeftButton = new Button(perspBarTabGroup, SWT.RADIO);
//		perspTopLeftButton.setText(PERSP_TOP_LEFT_TITLE);
//		perspTopLeftButton.setSelection(IWorkbenchPreferenceConstants.TOP_LEFT
//				.equals(perspBarLocation));
//		perspTopLeftButton.addSelectionListener(new SelectionAdapter() {
//			public void widgetSelected(SelectionEvent e) {
//				perspBarLocation = IWorkbenchPreferenceConstants.TOP_LEFT;
//			}
//		});
//
//		perspTopRightButton = new Button(perspBarTabGroup, SWT.RADIO);
//		perspTopRightButton.setText(PERSP_TOP_RIGHT_TITLE);
//		perspTopRightButton
//				.setSelection(IWorkbenchPreferenceConstants.TOP_RIGHT
//						.equals(perspBarLocation));
//		perspTopRightButton.addSelectionListener(new SelectionAdapter() {
//			public void widgetSelected(SelectionEvent e) {
//				perspBarLocation = IWorkbenchPreferenceConstants.TOP_RIGHT;
//			}
//		});
//
//		int spacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
//
//		FormData leftData = new FormData();
//		leftData.left = new FormAttachment(0, 0);
//
//		FormData topLeftData = new FormData();
//		topLeftData.left = new FormAttachment(perspLeftButton, spacing);
//
//		FormData topRightData = new FormData();
//		topRightData.left = new FormAttachment(perspTopLeftButton, spacing);
//
//		perspLeftButton.setLayoutData(leftData);
//		perspTopLeftButton.setLayoutData(topLeftData);
//		perspTopRightButton.setLayoutData(topRightData);
//	}
//
//	/**
//	 * Hook a listener to update the buttons based on an override preference. If
//	 * the preference is false then do not allow editing of these options.
//	 * 
//	 */
//	private void hookOverrideListener() {
//		if (overrideListener != null) {
//			return;
//		}
//		IPreferenceStore store = getPreferenceStore();
//		overrideListener = new IPropertyChangeListener() {
//			public void propertyChange(PropertyChangeEvent event) {
//				if (event.getProperty().equals(
//						IPreferenceConstants.OVERRIDE_PRESENTATION)) {
//					updateOverride();
//				}
//			}
//		};
//		store.addPropertyChangeListener(overrideListener);
//	}
//
//	/**
//	 * Dispose resources created by the receiver.
//	 */
//	public void dispose() {
//		super.dispose();
//		if (overrideListener != null) {
//			getPreferenceStore().removePropertyChangeListener(overrideListener);
//			overrideListener = null;
//		}
//	}
//
//	private void updateOverride() {
//		boolean override = getPreferenceStore().getBoolean(
//				IPreferenceConstants.OVERRIDE_PRESENTATION);
//		editorTabGroup.setEnabled(override);
//		editorTopButton.setEnabled(override);
//		editorBottomButton.setEnabled(override);
//		viewTabGroup.setEnabled(override);
//		viewTopButton.setEnabled(override);
//		viewBottomButton.setEnabled(override);
//		perspBarTabGroup.setEnabled(override);
//		perspTopLeftButton.setEnabled(override);
//		perspLeftButton.setEnabled(override);
//		perspTopRightButton.setEnabled(override);
//		showTextOnPerspectiveBar.setEnabled(override);
//	}
//
//	private void refreshPresentationCombo() {
//		// get the active presentation
//		presentationCombo.removeAll();
//		refreshPresentationFactories();
//
//		for (int i = 0; i < presentationFactories.length; ++i) {
//			IConfigurationElement el = presentationFactories[i];
//			String name = el.getAttribute(IWorkbenchConstants.TAG_NAME);
//			if (!currentPresentationFactoryId.equals(el
//					.getAttribute(IWorkbenchConstants.TAG_ID))) {
//				presentationCombo.add(name);
//			} else {
//				presentationCombo
//						.add(NLS
//								.bind(
//										WorkbenchMessages.ViewsPreference_currentPresentationFormat,
//										name));
//			}
//		}
//	}
//
//	private void setPresentationSelection() {
//		for (int i = 0; i < presentationFactories.length; ++i) {
//			if (currentPresentationFactoryId.equals(presentationFactories[i]
//					.getAttribute(IWorkbenchConstants.TAG_ID))) {
//				presentationCombo.select(i);
//				return;
//			}
//		}
//		// presentationCombo.select(0);
//	}
//
//	/**
//	 * Update this page's list of presentation factories. This should only be
//	 * used when the presentation combo is refreshed, as this array will be used
//	 * to set the selection from the combo.
//	 */
//	private void refreshPresentationFactories() {
//		// update the current selection (used to look for changes on apply)
//		currentPresentationFactoryId = PrefUtil.getAPIPreferenceStore()
//				.getString(
//						IWorkbenchPreferenceConstants.PRESENTATION_FACTORY_ID);
//		// Workbench.getInstance().getPresentationId();
//
//		// update the sorted list of factories
//		presentationFactories = Platform.getExtensionRegistry()
//				.getConfigurationElementsFor(PlatformUI.PLUGIN_ID,
//						IWorkbenchRegistryConstants.PL_PRESENTATION_FACTORIES);
//
//		// sort the array by name
//		Arrays.sort(presentationFactories, new Comparator() {
//			Collator collator = Collator.getInstance(Locale.getDefault());
//
//			public int compare(Object a, Object b) {
//				IConfigurationElement el1 = (IConfigurationElement) a;
//				IConfigurationElement el2 = (IConfigurationElement) b;
//				return collator.compare(el1
//						.getAttribute(IWorkbenchConstants.TAG_NAME), el2
//						.getAttribute(IWorkbenchConstants.TAG_NAME));
//			}
//		});
//	}
//
//	/**
//	 * Update the preferences associated with the argument presentation factory.
//	 * 
//	 * @return boolean
//	 *         <code>true<\code> of the presentation has changed and <code>false<\code> otherwise
//	 */
//	private boolean updatePresentationPreferences() {
//		// There are some preference values associated with the R2.1
//		// presentation that cannot be captured in the presentation
//		// factory. Perhaps the extension point should contain these
//		// (a list of attributes?), but for now it is done manually.
//
//		if (presentationCombo == null) {
//			return false;
//		}
//
//		String id = getSelectedPresentationID();
//
//		// if it hasn't changed then there's nothing to do
//		if (id.equals(currentPresentationFactoryId)) {
//			return false;
//		}
//
//		currentPresentationFactoryId = id;
//		// apply 2.1 prefs if needed
//		setPresentationPrefs(id);
//		// set the new presentation factory id
//		PrefUtil.getAPIPreferenceStore().putValue(
//				IWorkbenchPreferenceConstants.PRESENTATION_FACTORY_ID, id);
//		// a restart is required to update the presentation
//		return true;
//	}
//
//	private void setPresentationPrefs(String id) {
//		if (isR21(id)) {
//			setR21Preferences();
//		} else if (isR30(id)) {
//			setR30Preferences();
//		} else if (isR33(id)) {
//			setR33Preferences();
//		}
//	}
//
//	private boolean isR33(String id) {
//		return DEFAULT_PRESENTATION_ID.equals(id);
//	}
//
//	private boolean isR30(String id) {
//		return R30_PRESENTATION_ID.equals(id);
//	}
//
//	private boolean isR21(String id) {
//		return R21PRESENTATION_ID.equals(id);
//	}
//
//	private String getSelectedPresentationID() {
//		int selection = presentationCombo.getSelectionIndex();
//		IConfigurationElement element = presentationFactories[selection];
//		String id = element.getAttribute(IWorkbenchConstants.TAG_ID);
//		return id;
//	}
//
//	private void setR33Preferences() {
//		setR30Preferences();
//
//		// Turn -on- the new Min/Max behaviour
//		IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
//		apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX,
//				true);
//	}
//
//	private void setR30Preferences() {
//		IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
//
//		// Turn -off- the new min/max behaviour
//		apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX,
//				false);
//
//		setEditorAlignDefault(apiStore);
//		setViewAlignDefault(apiStore);
//
//		// perspective switcher on the left
//		perspBarLocation = apiStore
//				.getDefaultString(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR);
//		perspLeftButton.setSelection(perspBarLocation
//				.equals(IWorkbenchPreferenceConstants.LEFT));
//		perspTopLeftButton.setSelection(perspBarLocation
//				.equals(IWorkbenchPreferenceConstants.TOP_LEFT));
//		perspTopRightButton.setSelection(perspBarLocation
//				.equals(IWorkbenchPreferenceConstants.TOP_RIGHT));
//
//		// perspective bar should be set to default on OK or Apply
//		perspBarLocation = INITIAL_VAL;
//
//		// turn off text on persp bar
//		showTextOnPerspectiveBar
//				.setSelection(apiStore
//						.getDefaultBoolean(IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR));
//		// text on perspective bar should be set to default on OK or Apply
//		showTextOnPerspBar = INITIAL_VAL;
//
//		// fast view bar should be set to default on OK or Apply
//		fastViewLoc = INITIAL_VAL;
//	}
//
//	/**
//	 * Set the view alignment based on apiStore.
//	 * @param apiStore
//	 */
//	private void setViewAlignDefault(IPreferenceStore apiStore) {
//		int oldVal;
//		// reset the preferences for 3.0 presentation
//		oldVal = viewAlignment;
//		viewAlignment = apiStore
//				.getDefaultInt(IWorkbenchPreferenceConstants.VIEW_TAB_POSITION);
//		viewTopButton.setSelection(viewAlignment == SWT.TOP);
//		viewBottomButton.setSelection(viewAlignment == SWT.BOTTOM);
//
//		// view tabs should be set to default on OK or Apply
//		if (oldVal != viewAlignment) {
//			viewAlignmentChanged = true;
//		}
//		viewAlignment = INITIAL_LOC_INT;
//	}
//
//	private void setEditorAlignDefault(IPreferenceStore apiStore) {
//		// editor tabs on the bottom, really should associate this with the
//		// presentation
//		int oldVal = editorAlignment;
//		editorAlignment = apiStore
//				.getDefaultInt(IWorkbenchPreferenceConstants.EDITOR_TAB_POSITION);
//		editorTopButton.setSelection(editorAlignment == SWT.TOP);
//		editorBottomButton.setSelection(editorAlignment == SWT.BOTTOM);
//
//		// editor tabs should be set to default on OK or Apply
//		if (oldVal != editorAlignment) {
//			editorAlignmentChanged = true;
//		}
//		editorAlignment = INITIAL_LOC_INT;
//	}
//
//	private void setR21Preferences() {
//		// editor tabs on the bottom, really should associate this with the
//		// presentation
//		int oldVal = editorAlignment;
//		editorAlignment = SWT.TOP;
//		editorTopButton.setSelection(editorAlignment == SWT.TOP);
//		editorBottomButton.setSelection(editorAlignment == SWT.BOTTOM);
//		if (oldVal != editorAlignment) {
//			editorAlignmentChanged = true;
//		}
//
//		// view tabs on the bottom, really should associate this with the
//		// presentation
//		oldVal = viewAlignment;
//		viewAlignment = SWT.BOTTOM;
//		viewTopButton.setSelection(viewAlignment == SWT.TOP);
//		viewBottomButton.setSelection(viewAlignment == SWT.BOTTOM);
//		if (oldVal != viewAlignment) {
//			viewAlignmentChanged = true;
//		}
//
//		// perspective switcher on the left, really should associate this with
//		// the presentation
//		perspBarLocation = IWorkbenchPreferenceConstants.LEFT;
//		perspLeftButton.setSelection(perspBarLocation
//				.equals(IWorkbenchPreferenceConstants.LEFT));
//		perspTopLeftButton.setSelection(perspBarLocation
//				.equals(IWorkbenchPreferenceConstants.TOP_LEFT));
//		perspTopRightButton.setSelection(perspBarLocation
//				.equals(IWorkbenchPreferenceConstants.TOP_RIGHT));
//
//		// turn off text on persp bar, really should associate this with the
//		// presentation
//		showTextOnPerspectiveBar.setSelection(false);
//		showTextOnPerspBar = String.valueOf(false);
//
//		// fast view bar on the left (hidden pref, set it directly)
//		fastViewLoc = IWorkbenchPreferenceConstants.LEFT;
//
//		// Turn -off- the new min/max behaviour
//		IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
//		apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX,
//				false);
//	}
//
//	/**
//	 * @param themeToSelect
//	 *            the id of the theme to be selected
//	 */
//	private void refreshThemeCombo(String themeToSelect) {
//		themeCombo.removeAll();
//		ITheme currentTheme = PlatformUI.getWorkbench().getThemeManager()
//				.getCurrentTheme();
//
//		IThemeDescriptor[] descs = WorkbenchPlugin.getDefault()
//				.getThemeRegistry().getThemes();
//		String defaultThemeString = PlatformUI.getWorkbench().getThemeManager()
//				.getTheme(IThemeManager.DEFAULT_THEME).getLabel();
//		if (currentTheme.getId().equals(IThemeManager.DEFAULT_THEME)) {
//			defaultThemeString = NLS.bind(
//					WorkbenchMessages.ViewsPreference_currentThemeFormat,
//					new Object[] { defaultThemeString });
//		}
//		themeCombo.add(defaultThemeString);
//
//		String themeString;
//		int selection = 0;
//		for (int i = 0; i < descs.length; i++) {
//			themeString = descs[i].getName();
//			if (descs[i].getId().equals(currentTheme.getId())) {
//				themeString = NLS.bind(
//						WorkbenchMessages.ViewsPreference_currentThemeFormat,
//						new Object[] { themeString });
//			}
//			if (themeToSelect.equals(descs[i].getId())) {
//				selection = i + 1;
//			}
//			themeCombo.add(themeString);
//		}
//		themeCombo.select(selection);
//	}
//
//	/**
//	 * Create the button and text that support setting the preference for
//	 * showing text labels on the perspective switching bar.
//	 */
//	protected void createShowTextOnPerspectiveBarPref(Composite composite) {
//		IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
//
//		showTextOnPerspectiveBar = createCheckButton(
//				composite,
//				WorkbenchMessages.WorkbenchPreference_showTextOnPerspectiveBar,
//				apiStore
//						.getBoolean(IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR));
//	}
//
//	/**
//	 * Create the button and text that support setting the preference for
//	 * showing text labels on the perspective switching bar
//	 */
//	protected void createShowTraditionalStyleTabsPref(Composite composite) {
//		IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
//
//		showTraditionalStyleTabs = createCheckButton(
//				composite,
//				WorkbenchMessages.ViewsPreference_traditionalTabs,
//				apiStore
//						.getBoolean(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS));
//	}
//
//	protected void createEnableAnimationsPref(Composite composite) {
//		IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
//
//		enableAnimations = createCheckButton(
//				composite,
//				WorkbenchMessages.ViewsPreference_enableAnimations,
//				apiStore
//						.getBoolean(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS));
//	}
//
//	/**
//	 * Returns preference store that belongs to the our plugin.
//	 * 
//	 * @return IPreferenceStore the preference store for this plugin
//	 */
//	protected IPreferenceStore doGetPreferenceStore() {
//		return WorkbenchPlugin.getDefault().getPreferenceStore();
//	}
//
//	/**
//	 * Initializes this preference page for the given workbench.
//	 * <p>
//	 * This method is called automatically as the preference page is being
//	 * created and initialized. Clients must not call this method.
//	 * </p>
//	 * 
//	 * @param workbench
//	 *            the workbench
//	 */
//	public void init(IWorkbench workbench) {
//		currentPresentationFactoryId = PrefUtil.getAPIPreferenceStore()
//				.getString(
//						IWorkbenchPreferenceConstants.PRESENTATION_FACTORY_ID);
//	}
//
//	/**
//	 * The default button has been pressed.
//	 */
//	protected void performDefaults() {
//		IPreferenceStore store = getPreferenceStore();
//		IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
//
//		showTextOnPerspectiveBar
//				.setSelection(apiStore
//						.getDefaultBoolean(IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR));
//		showTraditionalStyleTabs
//				.setSelection(apiStore
//						.getDefaultBoolean(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS));
//		enableAnimations
//				.setSelection(apiStore
//						.getDefaultBoolean(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS));
//		useColoredLabels
//				.setSelection(apiStore
//						.getDefaultBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS));
//
//		String presID = apiStore
//				.getDefaultString(IWorkbenchPreferenceConstants.PRESENTATION_FACTORY_ID);
//		currentPresentationFactoryId = presID;
//		setPresentationSelection();
//
//		boolean overridePrefs = store
//				.getDefaultBoolean(IPreferenceConstants.OVERRIDE_PRESENTATION);
//		overridePresButton.setSelection(overridePrefs);
//
//		updateOverrideState(overridePrefs);
//
//		setEditorAlignDefault(apiStore);
//		setViewAlignDefault(apiStore);
//
//		perspBarLocation = apiStore
//				.getDefaultString(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR);
//		perspLeftButton.setSelection(IWorkbenchPreferenceConstants.LEFT
//				.equals(perspBarLocation));
//		perspTopLeftButton.setSelection(IWorkbenchPreferenceConstants.TOP_LEFT
//				.equals(perspBarLocation));
//		perspTopRightButton
//				.setSelection(IWorkbenchPreferenceConstants.TOP_RIGHT
//						.equals(perspBarLocation));
//
//		refreshThemeCombo(PlatformUI.getWorkbench().getThemeManager().getTheme(
//				IThemeManager.DEFAULT_THEME).getId());
//		refreshThemeDescriptionText();
//
//		WorkbenchPlugin.getDefault().savePluginPreferences();
//
//		super.performDefaults();
//	}
//
//	/**
//	 * The user has pressed Ok. Store/apply this page's values appropriately.
//	 */
//	public boolean performOk() {
//		IPreferenceStore store = getPreferenceStore();
//		IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
//		boolean override = store
//				.getBoolean(IPreferenceConstants.OVERRIDE_PRESENTATION);
//
//		// apply the presentation selection first since it might change some of
//		// the other values
//		boolean restart = updatePresentationPreferences();
//
//		if (showTextOnPerspBar.equals(INITIAL_VAL) && !override) {
//			apiStore
//					.setToDefault(IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR);
//		} else {
//			apiStore.setValue(
//					IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR,
//					showTextOnPerspectiveBar.getSelection());
//		}
//
//		if (editorAlignmentChanged) {
//			if (editorAlignment == INITIAL_LOC_INT) {
//				apiStore
//						.setToDefault(IWorkbenchPreferenceConstants.EDITOR_TAB_POSITION);
//			} else if (!override) {
//				// store the editor tab value to setting
//				apiStore.setValue(
//						IWorkbenchPreferenceConstants.EDITOR_TAB_POSITION,
//						editorAlignment);
//			} else {
//				// store the editor tab value to setting
//				apiStore.setValue(
//						IWorkbenchPreferenceConstants.EDITOR_TAB_POSITION,
//						editorAlignment);
//			}
//			restart = true;
//		}
//
//		if (viewAlignmentChanged) {
//			if (viewAlignment == INITIAL_LOC_INT) {
//				apiStore
//						.setToDefault(IWorkbenchPreferenceConstants.VIEW_TAB_POSITION);
//			} else if (!override) {
//				// store the view tab value to setting
//				apiStore.setValue(IWorkbenchPreferenceConstants.VIEW_TAB_POSITION,
//						viewAlignment);
//			} else {
//				// store the view tab value to setting
//				apiStore.setValue(IWorkbenchPreferenceConstants.VIEW_TAB_POSITION,
//						viewAlignment);
//			}
//			restart = true;
//		}
//
//		if (perspBarLocation.equals(INITIAL_VAL)) {
//			apiStore
//					.setToDefault(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR);
//		} else if (!override) {
//			// store the perspective bar text enabled setting
//			apiStore.setValue(
//					IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR,
//					perspBarLocation);
//		} else {
//			// store the perspective bar text enabled setting
//			apiStore.setValue(
//					IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR,
//					perspBarLocation);
//		}
//
//		if (fastViewLoc.equals(INITIAL_VAL)) {
//			apiStore
//					.setToDefault(IWorkbenchPreferenceConstants.INITIAL_FAST_VIEW_BAR_LOCATION);
//		} else {
//			apiStore
//					.setValue(
//							IWorkbenchPreferenceConstants.INITIAL_FAST_VIEW_BAR_LOCATION,
//							fastViewLoc);
//		}
//
//		int idx = themeCombo.getSelectionIndex();
//		if (idx <= 0) {
//			PlatformUI.getWorkbench().getThemeManager().setCurrentTheme(
//					IThemeManager.DEFAULT_THEME);
//			refreshThemeCombo(IThemeManager.DEFAULT_THEME);
//		} else {
//			IThemeDescriptor applyTheme = WorkbenchPlugin.getDefault()
//					.getThemeRegistry().getThemes()[idx - 1];
//			PlatformUI.getWorkbench().getThemeManager().setCurrentTheme(
//					applyTheme.getId());
//			refreshThemeCombo(applyTheme.getId());
//		}
//		refreshThemeDescriptionText();
//
//		apiStore.setValue(
//				IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS,
//				showTraditionalStyleTabs.getSelection());
//		apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS,
//				enableAnimations.getSelection());
//		apiStore.setValue(IWorkbenchPreferenceConstants.USE_COLORED_LABELS,
//				useColoredLabels.getSelection());
//
//		PrefUtil.savePrefs();
//
//		// we can get here through performApply, in that case only post one
//		// restart
//		if (restart && !restartPosted) {
//			if (getContainer() instanceof IWorkbenchPreferenceContainer) {
//				IWorkbenchPreferenceContainer container = (IWorkbenchPreferenceContainer) getContainer();
//				UIJob job = new UIJob(
//						WorkbenchMessages.ViewsPreference_restartRequestJobName) {
//					public IStatus runInUIThread(IProgressMonitor monitor) {
//						// make sure they really want to do this
//						int really = new MessageDialog(
//								null,
//								WorkbenchMessages.ViewsPreference_presentationConfirm_title,
//								null,
//								WorkbenchMessages.ViewsPreference_presentationConfirm_message,
//								MessageDialog.QUESTION,
//								new String[] {
//										WorkbenchMessages.ViewsPreference_presentationConfirm_yes,
//										WorkbenchMessages.ViewsPreference_presentationConfirm_no },
//								1).open();
//						if (really == Window.OK) {
//							PlatformUI.getWorkbench().restart();
//						}
//						return Status.OK_STATUS;
//					}
//				};
//				job.setSystem(true);
//				container.registerUpdateJob(job);
//				restartPosted = true;
//			}
//		}
//		return true;
//	}
//}
